import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * Author: Daniel
 * Date: 08.08.13
 */

public class Panel extends JPanel {
    private JTextField pierwszaLiczbaTF;
    private JLabel dzialanieLbl;
    private JTextField drugaLiczbaTF;
    private JLabel wynikLbl;
    private JComboBox<Dzialania> dzialanieCB;
    private Dzialania wybraneDzialanie = Dzialania.dodawanie;

    public Panel() {
        ustawPanel();
        ustawComponenty();
    }

    private void ustawPanel() {}

    private void ustawComponenty() {
        JLabel wybierzDzialanieLbl = new JLabel("Wybierz działanie: ");

        Dzialania[] values = Dzialania.values();
        dzialanieCB = new JComboBox<Dzialania>(values);
        dzialanieCB.addActionListener(new SluchaczListyCombo());


        pierwszaLiczbaTF = new JTextField(8);
        dzialanieLbl = new JLabel("+");
        drugaLiczbaTF = new JTextField(8);
        JLabel znakRownaSieLbl = new JLabel("=");
        wynikLbl = new JLabel("0");
        JButton buttonOblicz = new JButton("Oblicz");
        buttonOblicz.addActionListener(new SluchaczPrzyciskuOblicz());

        add(wybierzDzialanieLbl);
        add(dzialanieCB);
        add(pierwszaLiczbaTF);
        add(dzialanieLbl);
        add(drugaLiczbaTF);
        add(znakRownaSieLbl);
        add(wynikLbl);
        add(buttonOblicz);
    }

    class SluchaczPrzyciskuOblicz implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            try {
            double pierwszaLiczba = Double.parseDouble(pierwszaLiczbaTF.getText());
            double drugaLiczba = Double.parseDouble(drugaLiczbaTF.getText());
                double wynikDzialania = obliczWynik(pierwszaLiczba, drugaLiczba, wybraneDzialanie);
                wynikLbl.setText("" + wynikDzialania);
            } catch (NumberFormatException ex) {
                JOptionPane.showMessageDialog(null, "Podano nieprawidlowe liczby");
            }
        }
    }

    private double obliczWynik(double pierwszaLiczba, double drugaLiczba, Dzialania wybraneDzialanie) {
        switch (wybraneDzialanie) {
            case dodawanie:
                return pierwszaLiczba + drugaLiczba;
            case odejmowanie:
                return pierwszaLiczba - drugaLiczba;
            case mnozenie:
                return pierwszaLiczba * drugaLiczba;
            case dzielenie:
                return pierwszaLiczba / drugaLiczba;
            default: return -1;
        }
    }

    class SluchaczListyCombo implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            switch ((Dzialania)dzialanieCB.getSelectedItem()) {
                case dodawanie:
                    wybraneDzialanie = Dzialania.dodawanie;
                    dzialanieLbl.setText("+");
                    break;
                case odejmowanie:
                    wybraneDzialanie = Dzialania.odejmowanie;
                    dzialanieLbl.setText("-");
                    break;
                case mnozenie:
                    wybraneDzialanie = Dzialania.mnozenie;
                    dzialanieLbl.setText("*");
                    break;
                case dzielenie:
                    wybraneDzialanie = Dzialania.dzielenie;
                    dzialanieLbl.setText("/");
                    break;
            }
        }
    }
}
